/**
*
*  Elaborado por: Roberto Loaeza Valerio.
*                 geoAPP.
*                 28-abr-2006.
*
**/
package dbClass;

import ewe.data.LiveTreeNode;
import ewe.data.PropertyList;
import ewe.io.File;
import ewe.io.FileInputStream;
import ewe.io.IOException;
import ewe.io.InputStreamReader;
import ewe.ui.MenuItem;
import ewe.ui.TreeControl;
import ewe.ui.TreeTableModel;
import ewe.util.Vector;
import ewesoft.xml.XMLDecoder;
import ewesoft.xml.XMLElement;
import ewesoft.xml.sax.SAXException;

public class Edafologia {
	public PropertyList Suelos = new PropertyList();
	public PropertyList Mapas  = new PropertyList();
	public String archivo = new String();
	public String error="";
	public Group arbol;
	public LiveTreeNode root;
	public MenuItem groupMenu = new MenuItem();	
	public TreeControl tree;
	public TreeTableModel treeModel;
	

	
	public Edafologia(String datastore) {
		archivo=File.getProgramDirectory()+"/"+datastore+"edafologia.xml";
	}
	
	public Suelos getSuelo(String este) {	
		try {
			return (Suelos)Suelos.get(este).value;
		}catch(NullPointerException e) {
			Suelos s = new Suelos();
			s.aRGB = "-1";
			return s;
		}
	}
	public Mapas getMapa(String este) {		
		return (Mapas)Mapas.get(este).value;		
	}
	public void CargarTodo() {
		XMLDecoder xmlDecoder = new XMLDecoder();		
		try {												
			xmlDecoder.parse(new InputStreamReader(new FileInputStream(archivo)));					
			arbol=xml2tree((XMLElement)xmlDecoder.document.subElements.get(0));
			Suelos = XML2Suelos(((XMLElement)xmlDecoder.document.subElements.get(1)).subElements);
		} catch (SAXException e) {						
			error+="Error 1:"+e.toString();
			//Vm.debug(e.toString());
		}
		catch (IOException e) {			
			error+="Error 2:"+e.toString();
			//Vm.debug(e.toString());
		}
	}
	
	public Group xml2tree(XMLElement xml) {		
		XMLElement xml2, xml3, xml4;
		Group g1,g2, grupo;
		grupo = new Group("*");
		for(int i=0; i<xml.subElements.size(); i++) {
			xml2 =(XMLElement) xml.subElements.get(i);
			g1=new Group(xml2.attributes.get("nombre").value.toString());
			grupo.addChild(g1);
			
			for(int j=0; j<xml2.subElements.size(); j++) {				
				xml3 = (XMLElement)xml2.subElements.get(j);
				g2=new Group(xml3.attributes.get("nombre").value.toString());
				g1.addChild(g2);
				for(int k=0; k<xml3.subElements.size(); k++) {						
					xml4 = (XMLElement)xml3.subElements.get(k);					
					Mapas mapa = new Mapas();
					mapa.pais =  xml2.attributes.get("nombre").value.toString();
					mapa.estado = xml3.attributes.get("nombre").value.toString();
					mapa.municipio = xml4.text;
					mapa.ruta = xml4.attributes.get("ruta").value.toString();
					g2.addChild(mapa);										
				}
			}			
		}
		return grupo;
	}
	
	
	
	
	
	
	
	
	
	
	private PropertyList XML2Suelos(Vector xmlVector) {	
		PropertyList _Suelos = new PropertyList();	
		Suelos xml2Suelos;		
		XMLElement xmlElement = new XMLElement();
		for(int i=0; i<xmlVector.size(); i++) {
			xmlElement =(XMLElement)xmlVector.get(i);						
			xml2Suelos = new Suelos();
			if(xmlElement.attributes!=null) {
				xml2Suelos.nombre	= xmlElement.attributes.get("nombre").value.toString();
				xml2Suelos.aRGB		= xmlElement.attributes.get("aRGB").value.toString();															
			}
			xml2Suelos.descripcion = xmlElement.text;
			_Suelos.add(String.valueOf(xml2Suelos.aRGB).toString(),xml2Suelos);			
		}				
		return _Suelos;
	}	
	
}

